package com.yisu.expressway.api.core.service;

import com.yisu.expressway.api.domain.request.GoodsInfoRequest;
import com.yisu.expressway.api.domain.request.orderModule.ChangeOrderPaymentRequest;
import com.yisu.expressway.api.domain.request.orderModule.OrderListRequest;
import com.yisu.expressway.api.domain.request.orderModule.PaySuccessRequest;
import com.yisu.expressway.api.domain.vo.orderModule.OrderStatusNumVo;
import com.yisu.expressway.ewf.entity.OrderMain;
import com.yisu.expressway.ewf.entity.OrderSub;
import com.yisu.expressway.ewf.entity.RefundRecord;
import com.yisu.expressway.ewf.entity.SpecificationGoods;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 订单业务接口
 * Created by zj on 2017/5/4.
 */
public interface IOrderService {

    /**
     * 增加订单
     * @param orderMain 订单主信息
     * @param orderSubs 子表信息
     * @return 成功，失败
     */
    long addOrder(OrderMain orderMain, List<OrderSub> orderSubs);

    /**
     * 通过规格编号，商品编号，分类编号获取规格商品信息
     * @param goodsInfoRequest 请求信息
     * @return 成功，失败
     */
    SpecificationGoods getSpecificationGoods(GoodsInfoRequest goodsInfoRequest);

    /**
     * 通过订单编号，获取订单ID
     * @param orderId 订单ID
     * @return
     */
    OrderMain getOrderMainByOrderId(Long orderId);

    /**
     * 更改订单支付方式
     * @param changeOrderPaymentRequest 请求参数
     * @return
     */
    boolean changeOrderPayment(ChangeOrderPaymentRequest changeOrderPaymentRequest);

    /**
     * 支付成功回调接口
     * @param paySuccessRequest 支付成功回调参数
     * @return
     */
    boolean paySuccess(PaySuccessRequest paySuccessRequest);

    /**
     * 获取个人订单列表
     * @param orderListRequest 个人订单列表请求参数
     * @return 订单列表
     */
    List<OrderMain> getUserOrderMainList(OrderListRequest orderListRequest);

    /**
     * 通过订单编号获取订单子表列表信息
     * @param orderId 订单编号
     * @return 订单子表信息
     */
    List<OrderSub> getOrderSubListByOrderId(long orderId);

    /**
     * 通过用户帐号获取订单个各状态数量
     * @param userAccount 用户帐号
     * @return 对象
     */
    OrderStatusNumVo getOrderStatusNumByUserAccount(@Param("userAccount") String userAccount);


    /**
     * 取消订单
     * @param orderId 订单编号
     * @return 成功，失败
     */
    boolean cancelOrder(long orderId);

    /**
     * 更改订单状态
     * @param orderMain 订单详情
     * @return
     */
    boolean updateOrderUpdate(OrderMain orderMain);

    /**
     * 通过主键获取退款流水信息
     * @param primaryKey
     * @return
     */
    RefundRecord getRefundRecordByPrimaryKey(Long primaryKey);

    /**
     * 修改退款信息
     * @param updateModel
     * @return
     */
    boolean updateRefundRecord(RefundRecord updateModel);

    /**
     * 退款成功
     * @param updateModel 退款更新信息
     * @return 成功，失败
     */
    boolean refundSuccess(RefundRecord updateModel);

    /**
     * 取消没付款的订单
     *
     * @return
     */
    boolean cancelOrderForJob();

    /**
     * 确认收货
     */
    void confirmOrder();
}
